package jhlee42.swing;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import java.awt.Rectangle;
import java.awt.Toolkit;

import javax.swing.JDialog;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.UIManager;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JButton;

//스윙 기본 시나리오
//1. JFrame 크기 지정 : set bound(x좌표,y좌표,가로크기,세로크기) // 어떤 위치에 어느 정도 크기로 배치한다.
//2. 화면 정중앙에 표시 : setLocationRelativeTo(null); 추가 하면 정중앙에 배치
//3. 프로그램 아이콘 추가 : 속성 setIconImage // 디자인에서 추가 했다. google에서 free icon 검색..
//4. 프로그램 제목 지정 : setTitle
//5. 프레인 크기 변경불가 : setResizable
//6. splash(번쩍.. 잠깐 나왔다가 사라지는 것) 화면 표시 : META-INF 폴더에  MANIFEST.MF 파일 작성
//SplashScreen-Image: ~~  작성하고 항목을 추가한다.
//splash 뜨는 시간 지연: Thread.sleep(2000)
//7. 실행가능한 jar 파일 생성 (6번 과정과 관련)
// File > Export > Java > JAR file
//8. 메뉴 추가 : 메뉴 추가 순서 : JMenuBar -> JMenu -> JmenuItem
//JMenuBar 객체를 만들고 JFrame에 setMenuBar로 등록
//JMenu 객체를 만들고 JMenuBar에 add로 등록
//JMenuItem 객체를 만들고 JMenu에 add로 등록
//JMenuItem 의 setIcon 을 이용해서 메뉴 아이콘 등록 (Size는 20x20)
//JMenuItem 에 클릭 이벤트 추가 mntmn.addActionListener(new ActionListener() 를 이용해서 클릭(ActionPerformed) 이벤트 추가
// 간단한 대화상자는 JOptionPane의 showMessegeDialog
//9. 룩앤필 look and feel : GUI 측면과 디자인의 구성에 사용하는 용도
//색상,모양,레이아웃,서체,버튼,박스,메뉴등의 동적 요소를 의미
//자바에서 기본으로 제공하는 룩앤필은 다소 밋밋하기 때문에 교체 가능할 수 있도록 특별한 API 제공
//UIManager.setLookAndFeel()
//10. 종료 시점 제어
//11. 종료 시점 제어 swing은 이벤트 처리가 핵심(event-driven)인 GUI 환경임
//swing 에서 자주 사용하는 이벤트는 ActionListener - actionperform 임
//이벤트 메서드를 작성하는 방법 3가지 중 익명 클래스 기법을 자주사용하지만 가능하다면 독립된 이벤트 처리
//한편, 윈도우 닫기시 이벤트를 걸고 싶으면 WindowListener - windowClosing을 사용
//이것은 WindowAdapter를 이용
//하지만, WindowAdapter를 이용해서 처리하는 것을 추천
//11. 이미지 처리
//Jlabel 이용 : setIcon
//단 이미지 크기가 표시영역보다 크면 이미지 크기를 줄여야 전체가 다 보임
//Jpane 이용
//12. 모달 창 생성(새창 만들기) : 
//Modal 대화상자
//Modaless 대화상자
//13. 대화상자 닫기 이벤트 처리(About Swing Project)
//dispose()
//14.대화상자, GroupLayout 으로 우편번호 찾기 기능 구현






public class SwingProject extends JFrame {

	private JPanel contentPane;
	
	private static SwingProject frame; // 12 이거 하면 모달창만들수 있어요..
	
	private static String MetalLook="javax.swing.plaf.metal.MetalLookAndFeel";
	private static String NumbusLook="javax.swing.plaf.nimbus.NimbusLookAndFeel";
	
	
	
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Thread.sleep(2000); // 6
					
					// 룩앤필 변경 시작 9
					JFrame.setDefaultLookAndFeelDecorated(true);
					JDialog.setDefaultLookAndFeelDecorated(true);
					UIManager.setLookAndFeel(MetalLook);
					// 룩앤필 변경 끝 9
					
					//SwingProject frame = new SwingProject();
					frame = new SwingProject(); // 12. 
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public SwingProject() {
		setResizable(false); // 5
		setTitle("스윙 프로젝트 v1"); // 4
		setIconImage(Toolkit.getDefaultToolkit().getImage(SwingProject.class.getResource("/images/icon/icon.png"))); // 3
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); // 10
	
		// page 502 익명 클래스로~
		
		
		// addWindowListener : 윈도우 이벤트 처리 시작 10 - 
		addWindowListener(
				
				new WindowAdapter() {
					@Override
					public void windowClosing(WindowEvent e) {
						JFrame frame = (JFrame)e.getSource();
						// 이벤트를 발생한 주체를 알아냄 // Confirm 은 사용자에게 물어보려는것.
						int result = JOptionPane.showConfirmDialog(frame, "정말 프로그램을 끝내겠습니까?","프로그램 종료",JOptionPane.YES_NO_OPTION);
						// frame 은 부모창 여부를 알려고..					
						
						// showConfirmDialog : 확인,취소 버튼으로 이룽진 확인대화상자를 모달창으로 표시
						
						
						if(result == JOptionPane.YES_NO_OPTION){
							frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}
						
						// 확인대화상자에서 '확인'버튼을 누르면 현재 프레임을 닫음.
						
					}
				}
		) ; // addWindowListener : 윈도우 이벤트 처리 끝 10 - 
		
		
		
		
		
		
		
		setBounds(100, 100, 800, 600); // 1
		setLocationRelativeTo(null); // 2
		
		
//		메뉴 추가 시작		
		JMenuBar menuBar = new JMenuBar();
		setJMenuBar(menuBar);
		
		JMenu mnFIle = new JMenu("파 일 (F)");
		mnFIle.setIcon(new ImageIcon(SwingProject.class.getResource("/images/menu/new.png")));
		menuBar.add(mnFIle);
		
		JMenuItem miNew = new JMenuItem("새로 만들기(N)");
		miNew.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {	
				

	
			}
		});
		mnFIle.add(miNew);
		
		JMenuItem mntmNewMenuItem = new JMenuItem("열 기(O)");
		mnFIle.add(mntmNewMenuItem);
		
		JMenuItem mntmNewMenuItem_1 = new JMenuItem("저 장(S)");
		mnFIle.add(mntmNewMenuItem_1);
		
		JMenuItem mntmNewMenuItem_2 = new JMenuItem("------------------");
		mnFIle.add(mntmNewMenuItem_2);
		
		JMenuItem mntmNewMenuItem_3 = new JMenuItem("인 쇄(P)");
		mnFIle.add(mntmNewMenuItem_3);
		
		JMenuItem mntmNewMenuItem_4 = new JMenuItem("종 료(X)");
		mntmNewMenuItem_4.setIcon(new ImageIcon(SwingProject.class.getResource("/images/menu/exit.png")));
		mntmNewMenuItem_4.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}
		});
		mnFIle.add(mntmNewMenuItem_4);
		
		JMenu mnNewMenu_1 = new JMenu("편 집 (E)");
		menuBar.add(mnNewMenu_1);
		
		JMenu mnNewMenu_2 = new JMenu("보 기 (V)");
		menuBar.add(mnNewMenu_2);
		
		JMenu mnNewMenu_3 = new JMenu("도 구 (T)");
		menuBar.add(mnNewMenu_3);
		
		JMenu mnNewMenu_4 = new JMenu("창 (W)");
		menuBar.add(mnNewMenu_4);
		
		JMenu mnNewMenu_5 = new JMenu("도움말 (H)");
		menuBar.add(mnNewMenu_5);
		
		JMenuItem mnAbout = new JMenuItem("스윙프로젝트 관하여... (A)");
		mnAbout.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				/*새창 띄우기****************************************************************/
				AboutSwingProject dialog = new AboutSwingProject(frame); // 12 ...
				dialog.setVisible(true);
				/*****************************************************************/
				
				
			}
		});
		mnNewMenu_5.add(mnAbout);
		
		JLabel lblNewLabel = new JLabel("");
		menuBar.add(lblNewLabel);
		
//		메뉴 추가 끝
		
		
		
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		
		
		
		
		//JLabel 를 이용해서 이미지 표시 시작 11
		JLabel mainimage = new JLabel("New label");
		mainimage.setIcon(new ImageIcon(SwingProject.class.getResource("/images/background/suji01b.jpg")));
		contentPane.add(mainimage, BorderLayout.CENTER);
	}

	protected Object newWindow() {
		// TODO Auto-generated method stub
		return null;
	}

}
